今天的题目貌似暴力分好拿写欸,然而……窝只有 70 ?不过排名比昨天上升了什么鬼。
QwQ 题目的确很难懂,所以窝听了讲解后也没听懂多少,不过还是改出了第一题(第一题是人就改的出好吧o(≧口≦)o)。
题目压缩包戳我!!!~\(≧▽≦)/~
(有时链接可能会崩,如果崩了的话请稍后尝试QwQ)
T1
期望得分:30分
实际得分:30分
正解:找规律??
窝的解法:暴力模拟题意
题解:
第一眼看到题目,欸,如果按照题面模拟就有 30 分!出题人良心啊。然后看数据范围,100% 的数据的 n≤3×107 ,这应该是 O(n) 算法才行啊,于是想,或许是线性 DP ,然后推式子,推出这么一个鬼玩意:
f[i]=f[i−1]+sum(a[i])sum(a[i]) 就是在 1 到 i−1 中大于 a[i] 的数的个数,然后 f[i] 表示将前 i 个元素进行冒泡需要的交换次数。
很显然这是错的。
然后我就想到了 NOI 往年的冒泡排序(貌似是 NOI 的?),其实两道题没什么联系。
哎好吧发现过不去直接上暴力吧,题目说什么就做什么,于是把我用来对拍的暴力程序提交了上去,30 分。
接下来讲讲正解。
很显然,对于一个元素 ai ,它所在的位置为 i ,然而最后排好序后 ta 应该回到的位置为 ai 。观察冒泡过程,发现对于一个元素,每次冒泡排序都最多会将 ta 向自己的目标位置移动一格。
然后就是,比如说当前序列的最小元素,假设最小元素的起点位置为 s ,我们发现每次冒泡总会将 ta 向前移一格,然后在第 s−1 次冒泡排序的时候 1 归位了。然后发现 1 的移动对 2 的移动次数并没有产生影响,这个时候将 1 删去,发现 2 归位的移动次数变成了 2 的初始位置 − 1 ,放在原序列中就是 2 的初始位置 − 2 。
这至少说明,对于任意一个元素 i ,其所需要的移动次数为 i−ai 。
那么,如果要使序列有序,所需要的排序次数就是 max{i−ai} 。直接计算答案即可。
(实际上窝也不是很明白…..貌似是这样的吧 QwQ )
Code:
1 |
|
T2
期望得分:30分
实际得分:0分
正解:容斥+搜索+剪枝
窝的解法:暴搜
题解:
不会………….然后暴搜打挂了没得分。
所以这不能说是题解,留个坑吧。
T3
期望得分:40分
实际得分:40分
正解:将所有颜色维护成链,然后分块加速
窝的解法:直接维护成链
对于一个 i ,如果 ai=k ,并且 aj=k ,而且 i 和 j 是离得最近的,则将它们向前向星那样连起来,最后对询问的区间直接暴力跳即可。
Code:
1 |
|
正解不费………………………………….
本文标题:【考试总结】 Test-2019.3.28 HNOI2019模拟
文章作者:Qiuly
发布时间:2019年03月28日 - 00:00
最后更新:2019年04月03日 - 17:32
原始链接:http://qiulyblog.github.io/2019/03/28/[考试总结]test20190328/
许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。
v1.5.2